#ifndef _MY_LINK_H_
#define _MY_LINK_H_
// #include "book.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// #pragma(4)

struct int_arr
{
    int id[2];
} __attribute__((aligned(4)));

typedef struct int_arr data_type;

typedef struct node
{
    data_type *data; // 数据域
    struct node *prev;
    struct node *next; // 指针域，指向后继节点的指针

} node;

typedef struct _list
{
    struct node *head; // 指针域
    struct node *end;  // 指针域
    int size;
} *list_inf;

extern list_inf *H;

list_inf link_create(void);                                                                                // 创建链表
void link_destory(list_inf l);                                                                             // 摧毁链表
void link_clear(list_inf l);                                                                               // 清除链表
void link_push_back(list_inf l, data_type *data);                                                          // 尾插
void link_push_front(list_inf l, data_type *data);                                                         // 头插
void link_insert(list_inf l, unsigned poe, data_type *data);                                               // 中插
void link_remove(list_inf l, void *data, int (*cmp)(const void *, const void *));                          // 删除节点
int link_updata(list_inf l, data_type *data, data_type *new_data, int (*cmp)(const void *, const void *)); // 修改某个节点的数据
data_type *link_find(list_inf l, data_type *data, int (*cmp)(const void *, const void *));                 // 查找数据返回数据指针
node *find_link_struct(list_inf l, void *data, int (*cmp)(const void *, const void *));                    // 查找数据返回链表指针
void Reverse_to(list_inf l);                                                                               // 逆序;
void link_sort(list_inf l, int (*cmp)(const void *, const void *));

#endif
